package co.edu.uniquindio.ondas.negocio;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import co.edu.uniquindio.ondas.daos.AsesorDAO;
import co.edu.uniquindio.ondas.daos.ComentarioAsesorDAO;
import co.edu.uniquindio.ondas.daos.ConsultaDAO;
import co.edu.uniquindio.ondas.daos.InvestigacionDAO;
import co.edu.uniquindio.ondas.daos.RespuestaConsultaDAO;
import co.edu.uniquindio.ondas.dtos.ResumenConsultaDTO;
import co.edu.uniquindio.ondas.dtos.ResumenInvestigacionDTO;
import co.edu.uniquindio.ondas.entidades.Actividad;
import co.edu.uniquindio.ondas.entidades.Asesor;
import co.edu.uniquindio.ondas.entidades.Bitacora4Maestro;
import co.edu.uniquindio.ondas.entidades.ComentarioAsesor;
import co.edu.uniquindio.ondas.entidades.Consulta;
import co.edu.uniquindio.ondas.entidades.Investigacion;
import co.edu.uniquindio.ondas.entidades.RespuestaConsulta;
import co.edu.uniquindio.ondas.entidades.Segmento;

/**
 * Session Bean implementation class AsesorEJB
 * Implementacion del EJB Asesor
 */
@Stateless
public class AsesorEJB implements AsesorEJBRemote, AsesorEJBLocal {

	/**
	 * Manejador de la persistencia
	 */
	@PersistenceContext(unitName = "proyectoEJB")
	protected EntityManager entityManager;

	/**
	 * DAO del Asesor
	 */
	private AsesorDAO asesorDAO;
	/**
	 * DAO de la Consulta
	 */
	private ConsultaDAO consultaDAO;
	/**
	 * DAO de la  Respuesta Consulta
	 */
	private RespuestaConsultaDAO respuestaConsultaDAO;
	/**
	 * DAO  de la Investigacion
	 */
	private InvestigacionDAO investigacionDAO;
	/**
	 * DAO del comentario del Asesor
	 */
	private ComentarioAsesorDAO comentarioAsesorDAO;
	
	

	/**
	 * Clave del Asesor 
	 */
	@SuppressWarnings("unused")
	private Asesor asesorClave;

	/**
	 * Metodo constructor 
	 */
	public AsesorEJB() {

	}

	public boolean inicioSesionAsesor(String id, String clave) {

		boolean autenticado = false;

		asesorDAO = new AsesorDAO(entityManager);
		List<Asesor> asesor = asesorDAO.getAll();
	      asesorClave = asesorDAO.findByKey(clave);
		

			for (int i = 0; i < asesor.size(); i++) {

				if (asesor.get(i).getIdentificacion().equals(id)) {
					if (asesor.get(i).getClave().equals(clave)) {
							autenticado = true;
							break;
					}
					
				}

			}

		return autenticado;
	}
	
	
	public boolean modificarAsesor(Asesor asesor) {
		asesorDAO.update(asesor);
		return true;

	}

	public Asesor getAsesor(String id) {
		
		return asesorDAO.getAsesor(id);
	}

	public List<ResumenConsultaDTO> obtenerConsultasAsesor(String idAsesor) {
		consultaDAO=new ConsultaDAO(entityManager);
		return consultaDAO.obtenerConsultasAsesor(idAsesor);
	}

	public List<RespuestaConsulta> obtenerRespuestasConsulta(long idConsulta) {
		respuestaConsultaDAO=new RespuestaConsultaDAO(entityManager);
		return respuestaConsultaDAO.obtenerRespuestasConsulta(idConsulta);
	}

	public boolean crearRespuestaConsulta(RespuestaConsulta respuesta,
			long idConsulta) {
		respuestaConsultaDAO=new RespuestaConsultaDAO(entityManager);
		consultaDAO=new ConsultaDAO(entityManager);
		boolean creada=false;
		
		Consulta consulta=consultaDAO.findByKey(idConsulta);
		
		if (consulta!=null) {
			respuesta.setConsulta(consulta);
			respuestaConsultaDAO.insert(respuesta);
			creada=true;
		}
		return creada;
	}

	
	public List<ResumenInvestigacionDTO> obtenerInvestigacionAsesor(
			String idAsesor) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		return investigacionDAO.obtenerInvestigacionAsesor(idAsesor);
	}

	public List<Segmento> obtenerSegmentosInvestigacion(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		return investigacionDAO.obtenerSegmentosInvestigacion(idInvestigacion);
	}

	public List<Actividad> obtenerActividadesInvestigacion(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		return investigacionDAO.obtenerActividadesInvestigacion(idInvestigacion);
	}

	public Bitacora4Maestro obtenerBitacora4Maestro(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		List<Bitacora4Maestro>lista=investigacionDAO.getBitacota4MaestroInvestigacion(idInvestigacion);
		Bitacora4Maestro bitacora4Maestro=new Bitacora4Maestro();
		if (lista.size()!=0) {
			bitacora4Maestro=lista.get(0);
		}
		return bitacora4Maestro;
	}

	public boolean crearComentarioAsesor(ComentarioAsesor comentarioAsesor,
			long idInvestigacion) {
		comentarioAsesorDAO=new ComentarioAsesorDAO(entityManager);
		investigacionDAO=new InvestigacionDAO(entityManager);
		boolean creado=false;
		
		Investigacion investigacion=investigacionDAO.findByKey(idInvestigacion);
		
		if (investigacion!=null) {
			comentarioAsesor.setInvestigacion(investigacion);
			comentarioAsesorDAO.insert(comentarioAsesor);
			creado=true;
		}
		return creado;
	}

}
